/*
 * Powered By XY
 * Since 2020
 */

package com.xy.biz.mes.domain.query;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.util.CollectionUtils;

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 *
 *
 * @author zsp
 * @date 2022-1-6
 */
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Data
public class ManufactureTaskQuery {

    private static final int DEFAULT_PAGE_SIZE = 20;
    private static final int MAX_PAGE_SIZE = Integer.MAX_VALUE;

    /**
     * 返回记录的起始位置。
     */
    private Integer offset;

    /**
     * 返回记录的个数。
     */
    private Integer rows;

    /**
     * 生产任务编号
     */
    private String manufactureTaskCode;
    /**
     * 生产任务Id集合
     */
    private List<Long> manufactureTaskIdList;
    /**
     * 生产订单Id集合
     */
    private List<Long> manufactureOrderIdList;
    /**
     * 生产订单Id
     */
    private Long manufactureOrderId;
    /**
     * 生产订单编号
     */
    private String manufactureOrderCode;
    /**
     * 生产人用户Id
     */
    private Long manufactureUserId;
    /**
     * 生产人用户姓名
     */
    private String manufactureUserName;
    /**
     * 租户Id，0表示不指定
     */
    private Long tenantId;
    /**
     * 状态：0-已取消，10-待生产，20-开始生产，30-已记录，40-已核查
     */
    private Integer status;
    private List<Integer> statusList;
    /**
     * 创建时间
     */
    private LocalDateTime createTimeBegin;
    /**
     * 创建时间
     */
    private LocalDateTime createTimeEnd;
    /**
     * 查询物料信息
     */
    private Boolean withGoodsFlag;
    /**
     * 查询记录
     */
    private Boolean withRecordFlag;
    /**
     * 查询设备
     */
    private Boolean withEquipmentFlag;

    public Boolean getWithGoodsFlag() {
        return Objects.equals(true, withGoodsFlag);
    }

    public Boolean getWithRecordFlag() {
        return Objects.equals(true, withRecordFlag);
    }

    public Boolean getWithEquipmentFlag() {
        return Objects.equals(true, withEquipmentFlag);
    }

    /**
     * 构建一个查询。
     *
     * @param    pageIndex    页索引
     */
    public ManufactureTaskQuery(Integer pageIndex) {
        this(pageIndex, DEFAULT_PAGE_SIZE);
    }

    /**
     * 构建一个查询。
     *
     * @param    pageIndex    页索引
     * @param    pageSize    页大小
     */
    public ManufactureTaskQuery(Integer pageIndex, Integer pageSize) {
        int index = pageIndex == null ? 0 : pageIndex;
        int size = pageSize == null ? MAX_PAGE_SIZE : pageSize;
        this.offset = index * size;
        this.rows = size;
    }

    /**
     * 构造符合条件的查询对象，仅返回一条
     *
     * @return
     */
    public static ManufactureTaskQueryBuilder one() {
        return ManufactureTaskQuery.builder().offset(0).rows(1);
    }

    /**
     * 构造符合条件的查询对象，控制返回的记录上限
     *
     * @return
     */
    public static ManufactureTaskQueryBuilder max() {
        return ManufactureTaskQuery.builder().offset(0).rows(MAX_PAGE_SIZE);
    }

    public ManufactureTaskQuery addStatus(Integer status) {
        if (CollectionUtils.isEmpty(statusList)) {
            statusList = new ArrayList<>();
        }
        statusList.add(status);
        return this;
    }

}
